package com.lj.queue.properties;

import com.lj.queue.enums.TimeUnits;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author luojing
 * @since 2025/7/16 18:36
 */
@Configuration
@ConfigurationProperties(prefix = "lu-admin.queue.delay")
@Data
public class DelayQueueProperties {

    /**
     * 是否开启执行
     * 如果不开启则只会操作数据库而不会创建延迟队列执行延迟消息
     * 这样就可以后台管理系统操作，另外部署一台执行(todo 如果分布式部署的话，操作会有些问题,目前的解决方案是开发阶段提前设置好如果要修改重启执行的机器,待解决)
     */
    private boolean enableExecute = true;

    /**
     * 默认预加载时长(默认10分钟)
     */
    private long defaultPreloadDuration = 10;

    /**
     * 默认加载时间间隔(默认5分钟)
     * defaultPreloadDistance <= defaultPreloadDuration
     * 这两个参数的意思是每隔defaultPreloadDistance的时间进行预加载，
     * 每次预加载当前时间之后defaultPreloadDuration的时间的消息
     * 如果预加载时长小于了加载间隔，那么就会有消息丢失
     */
    private long defaultPreloadDistance = 5;

    /**
     * 默认时间单位
     */
    private TimeUnits defaultTimeUnit = TimeUnits.MINUTES;

    /**
     * 工作线程池核心线程数
     */
    private int workerCorePoolSize = Runtime.getRuntime().availableProcessors();

    /**
     * 工作线程池最大线程数
     */
    private int workerMaxPoolSize = Runtime.getRuntime().availableProcessors();

    /**
     * 工作线程池线程空闲时间，单位毫秒
     */
    private long keepAliveTime = 0;
}
